package com.atwulidun.template12;

public abstract class SoyaMilk1 {
    // 制作豆浆方法：模板方法，用final修饰，不给子类重写
    final void make() {
        select();
        // 添加钩子方法的第一种方式：
        if (isCondimentNeeded()) {
            add();
        }
        soak();
        mill();
    }

    protected void select() {
        System.out.println("精选上好的黄豆");
    }

    protected abstract void add();

    protected void soak() {
        System.out.println("将黄豆和佐料一起浸泡");
    }

    protected void mill() {
        System.out.println("将黄豆和佐料一起打磨");
    }

    // 钩子方法，用来判断是否需要添加佐料
    protected boolean isCondimentNeeded() {
        return true;
    }
}
